#define  _CRT_SECURE_NO_WARNINGS 1
#include<iostream>;
using namespace std;
//const int N = 1e5 + 5;
//int f[N][2];
//int g[N][2];
//int a[N];
//int main()
//{
//	int n;
//	cin >> n;
//	for (int i = 0; i < n; i++)
//		cin >> a[i];
//	f[0][0] = -a[0];
//	f[0][1] = -a[0];
//	g[0][1] = 0;
//	g[0][0] = 0;
//	for (int i = 1; i < n; i++)
//	{
//
//		f[i][0] = max(f[i - 1][0],g[i-1][0]-a[i]);
//		g[i][0] = g[i - 1][0];
//		g[i][1] = max(f[i - 1][0] + a[i], g[i - 1][1]);
//	}
//	cout << max(0, g[n - 1][1]);
//	return 0;
//}
#include<set>
int x, y;
int n,m;
int ret = 0;
int dx[2] = { 1,0 };
int dy[2] = { 0,1 };
set<pair<int, int>> d;
void dfs(int x, int y)
{
	if (d.count({ x,y })!=0)
	{
		return;
	}
	if (x == n && y == m)
	{
		ret++;
		return;
	}

	for (int i = 0; i < 2; i++)
	{
		int x2 = x + dx[i];
		int y2 = y + dy[i];
		if (x2 >= 0 && x2 <= n && y2 >= 0 && y2 <= m)
		{
			dfs(x2, y2);
		}
	}
}
int main()
{
	cin>>n>>m>>x>>y;
	d.insert({ x,y });
	d.insert({ x - 2,y - 1 });
	d.insert({ x-1,y-2 });
	d.insert({ x +1,y - 2 });
	d.insert({ x + 2,y - 1 });
	d.insert({ x + 2,y + 1 });
	d.insert({ x +1,y +2 });
	d.insert({ x -1,y +2 });
	d.insert({ x - 2,y + 1 });

	dfs(0, 0);
	cout << ret;
	return 0;
}